package algo3.tp1.tests;

import static org.junit.Assert.assertEquals;

import java.util.LinkedList;

import org.junit.Test;

import algo3.tp1.ejercicios.Ejercicio3;
import algo3.tp1.ejercicios.Juego;
import algo3.tp1.ejercicios.Movimiento;
import algo3.tp1.ejercicios.Posicion;

public class Ejercicio3Tests {
	public boolean resuelve(Juego j, LinkedList<Movimiento> movs){
		for(Movimiento m : movs){
			Posicion origen = m.dameOrigen();
			Posicion destino = m.dameDestino();
			
			int filaMedio = (origen.dameFila()+destino.dameFila())/2;
			int columnaMedio = (origen.dameColumna()+destino.dameColumna())/2;
					
			j.quitarFicha(new Posicion(filaMedio, columnaMedio));
			j.quitarFicha(origen);
			j.agregarFicha(destino);
		}

		return j.contarFichas() == 1;
	}
	
	@Test
	public void testResolver1() {
		boolean[][] m = {
				{true,false,false},
				{true,false,false},
				{false,false,false}
		};
		Juego j = new Juego(m);
		Juego jtest = new Juego(m);
		
		Ejercicio3 e = new Ejercicio3();
		assertEquals(true,resuelve(jtest,e.resolver(j)));
	}
	
	@Test
	public void testResolver2() {
		boolean[][] m = {
				{true,true,false},
				{true,false,false},
				{false,false,false}
		};
		Juego j = new Juego(m);
		
		Ejercicio3 e = new Ejercicio3();
		LinkedList<Movimiento> l = e.resolver(j);
		assertEquals(true, l.size() == 0);
	
	}
	@Test
	public void testResolver3() {
		boolean[][] m = {
				{true,true,false},
				{true,false,false},
				{false,false,false}
		};
		Juego j = new Juego(m);
		
		Ejercicio3 e = new Ejercicio3();
		LinkedList<Movimiento> l = e.resolver(j);
		assertEquals(true, l.size() == 0);
	
	}
	
	@Test
	public void testResolver4() {
		boolean[][] m = {
				{true,true,true,true,false,true,true,true,true,true,true}
		};
		Juego j = new Juego(m);
		
		Ejercicio3 e = new Ejercicio3();
		assertEquals(true,e.resolver(j).size() == 0);
	}
	
	@Test
	public void testResolver5() {
		boolean[][] m = {
				{false,true, true, false},
				{false,true, true, false},
				{true ,false,true, false},
				{false,true, false,false}
		};
		Juego j = new Juego(m);
		
		Ejercicio3 e = new Ejercicio3();
		LinkedList<Movimiento> l = e.resolver(j);
		assertEquals(true, l.size() == 0);
	
	}
	
	@Test
	public void testResolver6() {
		boolean[][] m = {
				{true,true,false,true}
		};
		Juego j = new Juego(m);
		Juego jtest = new Juego(m);
		
		Ejercicio3 e = new Ejercicio3();
		assertEquals(true,resuelve(jtest,e.resolver(j)));
	}
	
	public void testResolver7() {
		boolean[][] m = {
				{false, false, true, true, true, false, false},     
	            {false, false, true, true, true, false, false},     
	            {true,  true,  true, true, true, true,  true},     
	            {true,  true,  true, false, true, true,  true},
	            {true,  true,  true, true, true, true,  true},
	            {false, false, true, true, true, false, false},
	            {false, false, true, true, true, false, false}
		};
		Juego j = new Juego(m);
		Juego jtest = new Juego(m);
		
		Ejercicio3 e = new Ejercicio3();
		assertEquals(true,resuelve(jtest,e.resolver(j)));
	
	}
	@Test
	public void testResolver8() {
		boolean[][] m = {
				{true, true, true, false, true, true, true}
		};
		Juego j = new Juego(m);
		Juego jtest = new Juego(m);
		
		Ejercicio3 e = new Ejercicio3();
		assertEquals(false,resuelve(jtest,e.resolver(j)));		
	}
	@Test
	public void testResolver9() {
		boolean[][] m = {
				{true,false, true, false},
				{true,false, true, false},
				{false ,false,false, false},
				{false,false, false,true}
		};
		Juego j = new Juego(m);
		Juego jtest = new Juego(m);

		
		Ejercicio3 e = new Ejercicio3();
		assertEquals(false,resuelve(jtest,e.resolver(j)));		

	
	}
	@Test
	public void testResolver10() {
		boolean[][] m = {
				{true,false, true, false},
				{true,false, true, false},
				{false ,false,false, true},
				{false,false, false,false}
		};
		Juego j = new Juego(m);
		Juego jtest = new Juego(m);

		
		Ejercicio3 e = new Ejercicio3();
		assertEquals(true,resuelve(jtest,e.resolver(j)));		

	
	}
}